約 2,405,251 件
https://w.atwiki.jp/aerocats/pages/35.html
玄箱PROの初期状態 玄箱PROの通信設定に関する初期設定を記す。 外部と接続する仕組みで挙げたファイルに加え以下のファイルが基本的な通信の設定の役割を持っている。 /etc/hosts /etc/resolv.conf /etc/nsswitch.conf /etc/netinfo それぞれが、玄箱PROの標準Linuxでどのような初期設定になっているのかを記録する。 /etc/hosts ~ # cat /etc/hosts 127.0.0.1 localhost.localdomain localhost 192.168.1.9 KUROBOX-PRO /etc/resolv.conf ~ # cat /etc/resolv.conf nameserver 192.168.1.1 /etc/nsswitch.conf ~ # cat /etc/nsswitch.conf hosts files /etc/netinfo ~ # cat /etc/netinfo my_ipaddress=dhcp my_subnetmask= my_dgw=
https://w.atwiki.jp/anthony/pages/15.html
玄箱PRO-Tomcat 私の玄箱PROはDebian(etch)化しているのですが、色々試してうまく行ったtomcat4を導入する手順を紹介します。 (2007.12.25追記) 玄箱PRO-Javaにも追記したSunのARM/Linux版のJREを導入したので、JREのみで動作可能なTomcat5.5に移行しました。 いまさらTomcat4を使うより、Tomcat5.5の導入をお勧めします。当方かなり快適に安定稼動しています。 Tomcat5.5を導入 Apacheのサイト(http //tomcat.apache.org/ )からTomcat5.5をダウンロードします。 今回はSun-JRE1.4.2を使用するのでCoreとJDK 1.4 Compatability Packageが必要です。 Windowsで入手したパッケージを/optにFTPで転送しました。 解凍して、startup.shとshutdown.shにJAVA_HOMEを設定するだけで動作するようになります。 KUROBOX-PRO ~# cd /opt KUROBOX-PRO /opt# tar zxvf apache-tomcat-5.5.25.tar.gz KUROBOX-PRO /opt# tar zxvf apache-tomcat-5.5.25-compat.tar.gz KUROBOX-PRO /opt# cd /apache-tomcat-5.5.25/bin KUROBOX-PRO /opt/apache-tomcat-5.5.25/bin# vi startup.sh # ----------------------------------------------- export JAVA_HOME=/opt/j2re1.4.2 # Better OS/400 detection see Bugzilla 31132 KUROBOX-PRO /opt/apache-tomcat-5.5.25/bin# vi shutdown.sh # ----------------------------------------------- export JAVA_HOME=/opt/j2re1.4.2 # resolve links - $0 may be a softlink Apacheとの連携の設定は特に行わなくてもすぐに利用可能でした。 当サイトで紹介している方法でセットアップしていれば私と同じ状況になるかと思います。 Tomcat4を導入 ※先に玄箱PRO-JavaでSableVMが導入されていることが前提です。 ※関連パッケージ26個で23.5MB使用します (tomcat5の方が良いのかな?バージョンが低い方が軽いという観点でtomcat4を選択してます。tomcat3はServletAPIのバージョンが私の移行元のアプリケーションにあわないので必然的にServletAPI 2.3 JSP 1.2のtomcat4になりました。) 問題はetchでapt-cache searchしてもtomcat4が見つからないことです。sargeにはあったので/etc/apt/sources.listを一時的に編集してtomcat4を導入します。 KUROBOX-PRO ~# vi /etc/apt/sources.list deb http //ftp.jp.debian.org/debian etch main contrib non-free deb-src http //ftp.jp.debian.org/debian etch main contrib non-free deb http //ftp.jp.debian.org/debian sarge main contrib non-free deb http //security.debian.org etch/updates main contrib non-free deb-src http //security.debian.org etch/updates main contrib non-free deb http //security.debian.org sarge/updates main contrib non-free KUROBOX-PRO ~# apt-get update KUROBOX-PRO ~# apt-cache search tomcat4 tomcat4 - Java Servlet 2.3 engine with JSP 1.2 support libtomcat4-java - Java Servlet engine -- core libraries tomcat4-admin - Java Servlet engine -- admin web interfaces tomcat4-webapps - Java Servlet engine -- documentation and example web applicat KUROBOX-PRO ~# apt-cache depends tomcat4 tomcat4 |Depends j2sdk1.4 |Depends j2sdk1.3 |Depends kaffe Depends java-virtual-machine gij gij-4.1 jamvm sablevm sun-java5-jre |Depends j2sdk1.4 |Depends j2sdk1.3 |Depends kaffe Depends java-compiler gcj gcj-4.1 jikes-classpath jikes-gij jikes-kaffe jikes-sablevm jikes-sun Depends libtomcat4-java Depends libcommons-digester-java Depends libcommons-collections-java Depends libcommons-beanutils-java Depends libcommons-logging-java Depends adduser |Depends apache-utils Depends apache2-common Suggests libapache-mod-jk Suggests tomcat4-webapps Suggests tomcat4-admin Suggests ant KUROBOX-PRO ~# apt-get install tomcat4 tomcat4-admin tomcat4-webapps ここまで終わったらsarge用のパスは不要なのでコメント化しておきます。(あとあと混乱のもとになるので) KUROBOX-PRO ~# vi /etc/apt/sources.list deb http //ftp.jp.debian.org/debian etch main contrib non-free deb-src http //ftp.jp.debian.org/debian etch main contrib non-free #deb http //ftp.jp.debian.org/debian sarge main contrib non-free deb http //security.debian.org etch/updates main contrib non-free deb-src http //security.debian.org etch/updates main contrib non-free #deb http //security.debian.org sarge/updates main contrib non-free 次にSableVMでTomcat4が起動できるように/usr/share/tomcat4/bin/setclasspath.shを編集します。 編集箇所は1箇所です。「! -x "$JAVA_HOME"/bin/jdb -o」を削除します。 KUROBOX-PRO ~# vi /usr/share/tomcat4/bin/setclasspath.sh if [ ! -x "$JAVA_HOME"/bin/java -o ! -x "$JAVA_HOME"/bin/jdb -o ! -x "$JAVA_HOME"/bin/javac ]; then ↓ if [ ! -x "$JAVA_HOME"/bin/java -o ! -x "$JAVA_HOME"/bin/javac ]; then さらにSableVMでTomcat4が起動できるように/etc/default/tomcat4を編集します。 設定する変数と説明を示します。viで編集してください。(もちろん説明部分は不要です) KUROBOX-PRO ~# vi /etc/default/tomcat4 ■1箇所目:free-java-sdkを使用する JAVA_HOME=/usr/lib/fjsdk ■2箇所目:SableVMに-Xmx128Mの引数はないのでSableVM用の引数にしてここでは64Mに設定 CATALINA_OPTS="-Djava.awt.headless=true -Dsablevm.heap.size.max=64000000" ■3箇所目:free-java-sdkではcom.sun.tools.javac.Main(tools.jar)が無いのでjikesを指定 JSP_COMPILER=jikes ■4箇所目:SecurityManagerを有効にするとうまく動かなかったため、暫定でnoに設定 TOMCAT4_SECURITY=no 最後にJSPコンパイルをjikesで行うように/var/lib/tomcat4/conf/web.xmlを編集します。 JspServletのinit-paramにcompilerを追加して値をjikesにします。 KUROBOX-PRO ~# vi /var/lib/tomcat4/conf/web.xml servlet servlet-name jsp /servlet-name servlet-class org.apache.jasper.servlet.JspServlet /servlet-class init-param param-name logVerbosityLevel /param-name param-value WARNING /param-value /init-param init-param param-name compiler /param-name param-value jikes /param-value /init-param init-param param-name fork /param-name param-value false /param-value /init-param load-on-startup 3 /load-on-startup /servlet 稼動確認を行います。暫くしてからポートが開いたかを確認します。 KUROBOX-PRO ~# /etc/init.d/tomcat4 start Starting Tomcat 4.1 servlet engine using Java from /usr/lib/fjsdk tomcat4. KUROBOX-PRO ~# netstat -a | grep 8180 tcp 0 0 * 8180 * * LISTEN ログは/var/log/tomcat4に出力されています。 KUROBOX-PRO ~# ls -l /var/log/tomcat4 prwx------ 1 tomcat4 root 0 May 2 12 22 catalina.out -rw-r--r-- 1 tomcat4 nogroup 32276 May 2 12 22 catalina_2007-05-02.log -rw-r--r-- 1 tomcat4 nogroup 20620 May 2 12 22 localhost_2007-05-02.log wgetで確認します。 KUROBOX-PRO ~# wget http //localhost 8180/ --12 32 57-- http //localhost 8180/ = `index.html Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1| 8180... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location http //localhost 8180/index.jsp [following] --12 32 57-- http //localhost 8180/index.jsp = `index.jsp Reusing existing connection to localhost 8180. HTTP request sent, awaiting response... 200 OK Length 8,083 (7.9K) [text/html] 100%[============================================== ] 8,083 --.--K/s 12 32 57 (31.85 MB/s) - `index.jsp saved [8083/8083] 関連パッケージ 私はtomcat4のみの導入にしました。managerもadminも使うことがないので・・・ KUROBOX-PRO ~# apt-get install tomcat4 Reading package lists... Done Building dependency tree... Done The following extra packages will be installed apache-utils apache2-utils libant1.6-java libapr1 libaprutil1 libbcel-java libcommons-beanutils-java libcommons-collections-java libcommons-collections3-java libcommons-dbcp-java libcommons-digester-java libcommons-fileupload-java libcommons-logging-java libcommons-modeler-java libcommons-pool-java libjaxp1.3-java liblog4j1.2-java libmx4j-java libpcre3 libpq4 libregexp-java libservlet2.3-java libsqlite3-0 libtomcat4-java libxerces2-java Suggested packages junit ant libbcel-java-doc libcommons-beanutils-java-doc libcommons-collections-java-doc libcommons-collections3-java-doc liblogkit-java libavalon-framework-java classpath-doc libgnumail-java libservlet2.4-java jython libxerces2-java-doc libapache-mod-jk tomcat4-webapps tomcat4-admin The following NEW packages will be installed apache-utils apache2-utils libant1.6-java libapr1 libaprutil1 libbcel-java libcommons-beanutils-java libcommons-collections-java libcommons-collections3-java libcommons-dbcp-java libcommons-digester-java libcommons-fileupload-java libcommons-logging-java libcommons-modeler-java libcommons-pool-java libjaxp1.3-java liblog4j1.2-java libmx4j-java libpcre3 libpq4 libregexp-java libservlet2.3-java libsqlite3-0 libtomcat4-java libxerces2-java tomcat4 0 upgraded, 26 newly installed, 0 to remove and 15 not upgraded. Need to get 9692kB of archives. After unpacking 23.5MB of additional disk space will be used. Do you want to continue [Y/n]? tomcat4-adminやtomcat4-webappsを入れないときはserver.xmlを編集する必要があります。 KUROBOX-PRO ~# vi /etc/tomcat4/server.xml !-- Context path="/tomcat-docs" docBase="tomcat-docs" debug="0" Resources className="org.apache.naming.resources.FileDirContext" allowLinking="true" / /Context -- その他不要なGlobalNamingResourcesやRealmなどをコメントしています。(ここでは割愛) また、tomcat4-adminやtomcat4-webappsを入れないときの稼動確認方法はこちら KUROBOX-PRO ~# wget http //localhost 8180/ -O /dev/null --11 02 02-- http //localhost 8180/ = `/dev/null Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1| 8180... connected. HTTP request sent, awaiting response... 200 OK Length 878 [text/html] 100%[============================================== ] 878 --.--K/s 11 02 02 (8.72 MB/s) - `/dev/null saved [878/878] 最終更新日:2007-12-25
https://w.atwiki.jp/aster-infra/pages/136.html
HDDのパーティションはLinuxインストール時に作成することもできますが、 インストール後もfdiskコマンドを使って操作できます。 ただし、既存のパーティションを変更すると、システムが影響を受けてしまいます。 fdisk デバイスファイル名 fdiskコマンドは、対話的な操作を通じてパーティションの作成や削除を行います。 既存のパーティションに対して、新規パーティションを作成したり、パーティションを削除したりすると、 記録されているデータが失われたりします。 実行する前にデータのバックアップを取るようにしてください。
https://w.atwiki.jp/aerocats/pages/42.html
SATAとは「Serial Advanced Technology Attachment」の略で"シリアルATA"と訳される。 語句の成り立ちから考えると「S-ATA」と表記する方が正しいかもしれない。 ATAとは従来からあるPCとHDD間のインターフェースのことで、ここではあまり述べない。 玄箱PROへのSATA2 玄箱PROに接続できるHDDの規格としてこのSATAがあげられるが、まれに「SATA2のHDDは取り付けられないのか」といった質問がある。 SATA2とはSATAの上位規格であり、具体的には転送速度があがりNCQ(ネイティブコマンドキューイング)といった機能に対応している。 これらSATA、SATA2ともに完全上位互換となっており、SATA2HDDを玄箱PROに接続してもSATAとして動作するので、「取り付けられるか」という質問には「取り付けられる」となる。 しかしその場合の動作はSATAモードであり、SATA2の恩恵にはあずかれない。
https://w.atwiki.jp/aerocats/pages/19.html
/etcとは 別ページ「etcディレクトリとは」参照。 標準Linuxでも基本的に/etcディレクトリの役割は一般的なLinuxと変わりがない。 /etcの構成 実際に標準Linuxではどのような構成となっているか。 ファイルもしくはディレクトリ名 設定内容 BootFlag default/ 起動時に読み込まれる設定ファイル dhcpc/ DHCPクライアントの設定ファイルなどを保存するディレクトリ fan.prof Fandの設定ファイル(冷却ファンの回転数と温度の対応) first_boot fstab Linuxの起動の過程で自動的にマウントするデバイスの定義 group gshadow host.info 玄箱PROのネットワークで使う名前 hosts IPアドレスと名前の対応(一部はLinuxの起動の過程で書き込まれる) inetd.conf inetdの設定ファイル(非常駐型デーモンの起動) init.d/ デーモンの起動と終了の仕組みを保存するディレクトリ inittab Linuxの起動から終了の各段階で実行する処理 issue シリアルに接続した端末機に表示するメッセージ issue.net issueへのシンボリックリンク?。ネットワーク経由で接続した端末機に表示するメッセージ kurobox_release 標準Linuxのバージョン情報 ld.so.cache ld.so.conf 共有ライブラリ?が保存されているディレクトリの定義 localtime mtab /proc/mountsへのシンボリックリンク?。最新のマウントの状況 mtab~ netinfo 玄箱PROのIPアドレス(初期値はDHCPサーバから受け取る設定) nsswitch.conf IPアドレスと名前の対応を参照する場所の優先順位 ntp.conf ntp.conf.sv pam.d/ passwd profile 環境変数の初期値 resolv.conf resolv.conf.sv samba/ Sambaサーバーの設定ファイルなどを保存するディレクトリ services inetdの設定ファイル(ポート番号とサーバーの対応) shadow skel/ syslog.conf syslogdの設定ファイル(ログの種類と保存場所の対応) termcap 端末機の種類とエミュレーションの方法の対応 yp.conf yp.conf.sv ※参考「玄箱PROで遊ぼう!!(71ページ)」(ラトルズ)
https://w.atwiki.jp/aerocats/pages/3.html
タグ一覧 標準Linux 概略 Linux全般 シェルスクリプト 一覧 玄箱PRO固有 ディレクトリ エラー /etc コマンド RESETボタン ディストリビューション 起動メッセージ 外部接続 tftp 開発用Linux フラッシュメモリ オプション 終了メッセージ U-boot /dev /var /usr miconapl /bin /sbin /proc スペック プログラム 「玄箱PRO」関連ブログ #technorati
https://w.atwiki.jp/aerocats/pages/43.html
主にLinuxで扱われる言葉だが、Linuxカーネル?とアプリケーションなどをパッケージして配布されるものを指す。 より詳細には、GNU/Linuxオペレーティングシステムを容易に導入できるようにした配布物をLinuxディストリビューションと呼ぶ。 本来はLinuxカーネル?を「Linux」と呼ぶため、これらディストリビューションを「ディストリ」「OS」などと呼ぶ。 つまり、自分の環境を説明するのに「Linuxを使っていてこういう不具合がある、どうすればいいだろうか」といった質問はあまりに抽象的であり誰にも答えることができないだろう。 玄箱PROでのディストリビューション 書籍やネットで玄箱PROへの導入可能なディストリビューションについて、今では様々な報告がある。 結局はARM?というCPUアーキテクチャーに対応していることが重要なのだが、ディストリビューション側の努力もあり、対応状況は日々変化している。 現在のところ以下のディストリビューションが玄箱PROに導入可能だ。 ディストリビューション名 系統 標準パッケージ管理システム 導入方法 Debian GNU/Linux Debian系 apt Debian化の方法 FedoraCore6 Redhat系 yum FedoraCore6化の方法 Fedora8 Redhat系 yum Fedora8化の方法 GentooLinux - Portage GentooLinux化の方法 ディストリビューションの特長 ディストリビューションが様々に存在する理由は、それぞれの配布者がそれぞれの利便性を盛り込むためであり、必然的にディストリビューションごとに突出したメリット・デメリットがある。 Debianとは Fedoraとは Gentooとは
https://w.atwiki.jp/aerocats/pages/20.html
玄箱PRO関連で「標準Linux」と言った場合、特に指定がないかぎりは工場出荷状態のままの状態を指す。 MontaVista Linuxという組み込みに特化したディストリビューションを採用している。 標準Linuxの特長 玄箱PROの標準Linuxに見られるいくつかの特長とは NANDフラッシュ領域で作動し、HDD未装着でも問題はない。 samba?、swat?、httpd?、telnetdなどがインストールされている。 gccなどの開発環境は整っていない。 miconapl、nvramなどのBuffalo独自ソフトがインストールされている。 BusyBoxのinitのためランレベルの概念はない。 などがある。 ハックを目的とせずNASとして使用する限り、この標準Linuxのままで支障はないが、何らかのビルドを必要とした場合、附属CD-ROMに収められた開発用LinuxをHDDに展開する必要がある。 標準Linuxのメリット HDDに依存しない動作のため、省電力で静音性の高い環境で作業ができる。 HDD未装着であれば、背面のファンを数えず「ゼロスピンドル」を実現している。 標準Linuxのデメリット 現実にHDD未装着では大したことはなにもできない。 なおかつ、書き換え回数に制限(セクターあたり約10万回)のあるフラッシュメモリを頻繁に使用する、という点も好ましくない。 開発環境がないため、簡単なビルドにすら事欠く。
https://w.atwiki.jp/anthony/pages/27.html
玄箱PROパッチ適用 私のようにswat不具合を抱えた玄箱PROを持っている場合は必要になる作業です。ここではTFTPを使用したパッチ適用(ファームウェア・バージョンアップ)です。これもシリアルコンソールなしにはできません。 TFTPサーバー Poor TFTP Server for WIN32をダウンロードして展開 ptftp32.exeを実行 Timeoutは60秒に設定しておく 同じディレクトリにinitrd.buffaloとuImage.buffaloを配置しておく シリアルコンソールからリブートする KUROBOX-PRO ~# reboot PCのアドレスが192.168.1.4でさっき玄箱PROをブートしたときのアドレスが192.168.1.12だったのでserveripにはPCのアドレス、ipaddrには玄箱PROのアドレスを設定 Marvell setenv serverip 192.168.1.4 Marvell setenv ipaddr 192.168.1.12 Marvell tftp $(default_kernel_addr) $(kernel) Using egiga0 device TFTP from server 192.168.1.4; our IP address is 192.168.1.12 Filename uImage.buffalo . Load address 0x100000 Loading ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ############### done Bytes transferred = 1736612 (1a7fa4 hex) Marvell setenv bootargs $(bootargs_base) $(bootargs_root) rw initrd=0x02000040,20M panic=5 $(buffalo_ver) Marvell bootm $(default_kernel_addr) $(default_initrd_addr) stop_sound ## Booting image at 00100000 ... Image Name Linux-2.6.12.6-arm1 Created 2007-04-10 13 45 13 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736548 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 Verifying Checksum ... OK OK ## Loading Ramdisk Image at 02000000 ... Image Name initrd Created 2007-04-10 13 46 52 UTC Image Type ARM Linux RAMDisk Image (gzip compressed) Data Size 19286692 Bytes = 18.4 MB Load Address 00000000 Entry Point 00000000 Verifying Checksum ... Bad Data CRC bootm fail. system_not_found Using egiga0 device TFTP from server 192.168.1.4; our IP address is 192.168.1.12 Filename uImage.buffalo . Load address 0x100000 Loading ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ############### done Bytes transferred = 1736612 (1a7fa4 hex) Using egiga0 device TFTP from server 192.168.1.4; our IP address is 192.168.1.12 Filename initrd.buffalo . Load address 0x2000000 Loading ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ############################################################## done Bytes transferred = 19286756 (1264ae4 hex) stop_sound ## Booting image at 00100000 ... Image Name Linux-2.6.12.6-arm1 Created 2007-04-10 13 45 13 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736548 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 Verifying Checksum ... OK OK ## Loading Ramdisk Image at 02000000 ... Image Name initrd Created 2007-04-10 13 46 52 UTC Image Type ARM Linux RAMDisk Image (gzip compressed) Data Size 19286692 Bytes = 18.4 MB Load Address 00000000 Entry Point 00000000 Verifying Checksum ... OK Starting kernel ... arg console=ttyS0,115200 root=/dev/sda2 rw panic=5 rw initrd=0x02000040,20M panic=5 BOOTVER=1.091 CONFIG_KUROBOX_PLATFORM CONFIG_KUROBOX_KUROBOX --- Uncompressing Linux........................................................ ......................................................... done, booting the kernel. Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #27 Tue Apr 10 22 47 16 JST 2007 CPU ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ) CPU0 D VIVT write-back cache CPU0 I cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets CPU0 D cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets Machine MV-88fxx81 Using UBoot passing parameters structure Sys Clk = 250000000, Tclk = 166664740 Memory policy ECC disabled, Data cache writeback Built 1 zonelists Kernel command line console=ttyS0,115200 root=/dev/sda2 rw panic=5 rw initrd=0x02000040,20M panic=5 BOOTVER=1.091 PID hash table entries 1024 (order 10, 16384 bytes) Console colour dummy device 80x30 Dentry cache hash table entries 32768 (order 5, 131072 bytes) Inode-cache hash table entries 16384 (order 4, 65536 bytes) Memory 128MB 0MB 0MB 0MB = 128MB total Memory 105600KB available (3037K code, 426K data, 112K init) Mount-cache hash table entries 512 CPU Testing write buffer coherency ok checking if image is initramfs...it isn t (no cpio magic); looks like an initrd Freeing initrd memory 20480K NET Registered protocol family 16 serial_initialize_ttyS1 (Debug) ttyS1 is initialized. config_device_cs Error Unknown board CPU Interface ------------- SDRAM_CS0 ....base 00000000, size 128MB SDRAM_CS1 ....disable SDRAM_CS2 ....disable SDRAM_CS3 ....disable PEX0_MEM ....base e0000000, size 128MB PEX0_IO ....base f2000000, size 1MB PCI0_MEM ....base e8000000, size 128MB PCI0_IO ....base f2100000, size 1MB INTER_REGS ....base f1000000, size 1MB DEVICE_CS0 ....base fa000000, size 2MB DEVICE_CS1 ....base f4000000, size 32MB DEVICE_CS2 ....base fa800000, size 1MB DEV_BOOCS ....base ff800000, size 8MB CRYPTO ENG ....no such Flash bankwidth 1, base ff800000, size 400000 KUROBOX FLASH size 4096[KB] Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- KUROBOX_ BOARD_KUROBOX Soc 88F5182 A2 Detected Tclk 166664740 and SysClk 250000000 Marvell USB EHCI Host controller #0 c3403bc0 Marvell USB EHCI Host controller #1 c3403a40 pexBarOverlapDetect winNum 2 overlap current 0 mvPexInit Warning Bar 2 size is illigal it will be disabled please check Pex and CPU windows configuration PCI bus0 Fast back to back transfers enabled PCI bus1 Fast back to back transfers enabled SCSI subsystem initialized usbcore registered new driver usbfs usbcore registered new driver hub Use the XOR engines (offloading) for enhancing the following functions o RAID 5 Xor calculation o kernel memcpy o kenrel memzero o copy user to/from kernel buffers Number of XOR engines to use 2 cesadev_init(c00122e4) Fast Floating Point Emulator V0.9 (c) Peter Teichmann. inotify device minor=63 JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc. SGI XFS with no debug enabled Serial 8250/16550 driver $Revision 1.90 $ 4 ports, IRQ sharing disabled ttyS0 at MMIO 0x0 (irq = 3) is a 16550A ttyS1 at MMIO 0x0 (irq = 4) is a 16550A io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered RAMDISK driver initialized 3 RAM disks of 32768K size 1024 blocksize loop loaded (max 8 devices) Marvell Gigabit Ethernet Driver egiga o Ethernet descriptors in DRAM o DRAM SW cache-coherency o Checksum offload enabled o Loading network interface ** egiga_init_module (10) eth0 Intergrated Sata device found scsi0 Marvell SCSI to SATA adapter scsi1 Marvell SCSI to SATA adapter Vendor Hitachi Model HDT725050VLA360 Rev V56O Type Direct-Access ANSI SCSI revision 03 SCSI device sda 976773168 512-byte hdwr sectors (500108 MB) SCSI device sda drive cache write back SCSI device sda 976773168 512-byte hdwr sectors (500108 MB) SCSI device sda drive cache write back sda sda1 sda2 sda3 sda4 Attached scsi disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0 physmap flash device 400000 at ff800000 Found SST 39LF020 phys_mapped_flash Found 1 x8 devices at 0x0 in 8-bit bank number of JEDEC chips 1 cfi_cmdset_0002 Disabling erase-suspend-program due to code brokenness. RedBoot partition parsing not available Debug nand_scan nand_flash_ids[i].pagesize is exist Debug nand_scan mtd- erasesize=0x00020000 Debug nand_scan mtd- oobblock=0x00000800 Debug nand_scan mtd- oobsize=0x00000040 NAND device Manufacturer ID 0x20, Chip ID 0xda (ST Micro NAND 256MiB 3,3 V 8-bit) Scanning device for bad blocks Bad eraseblock 854 at 0x06ac0000 Using static partition definition Creating 3 MTD partitions on "nand_mtd" 0x00000000-0x00400000 "uImage" 0x00400000-0x04400000 "rootfs" 0x04400000-0x10000000 "extra" usbmon debugs is not available ehci_platform ehci_platform.4523 EHCI Host Controller ehci_platform ehci_platform.4523 new USB bus registered, assigned bus numb er 1 ehci_platform ehci_platform.4523 irq 17, io mem 0x00000000 ehci_platform ehci_platform.4523 park 0 ehci_platform ehci_platform.4523 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 1-0 1.0 USB hub found hub 1-0 1.0 1 port detected ehci_platform ehci_platform.16781 EHCI Host Controller ehci_platform ehci_platform.16781 new USB bus registered, assigned bus num ber 2 ehci_platform ehci_platform.16781 irq 12, io mem 0x00000000 ehci_platform ehci_platform.16781 park 0 ehci_platform ehci_platform.16781 USB 0.0 initialized, EHCI 1.00, driver 1 0 Dec 2004 hub 2-0 1.0 USB hub found hub 2-0 1.0 1 port detected USB Universal Host Controller Interface driver v2.2 Initializing USB Mass Storage driver... usbcore registered new driver usb-storage USB Mass Storage support registered. usbcore registered new driver usbhid drivers/usb/input/hid-core.c v2.01 USB HID core driver mice PS/2 mouse device common for all mice md raid0 personality registered as nr 2 md raid1 personality registered as nr 3 md raid5 personality registered as nr 4 raid5 measuring checksumming speed arm4regs 308.800 MB/sec 8regs 217.600 MB/sec 32regs 252.400 MB/sec raid5 using function arm4regs (308.800 MB/sec) md md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27 Buffalo Platform Linux Driver(Light) 0.01 installed. MICON ctrl (C) BUFFALO INC. V.1.00 installed. Kernel event proc (C) BUFFALO INC. V.1.00 installed. MICON V2 (C) BUFFALO INC. V.1.00 installed. NET Registered protocol family 2 IP routing cache hash table of 1024 buckets, 8Kbytes TCP established hash table entries 8192 (order 4, 65536 bytes) TCP bind hash table entries 8192 (order 3, 32768 bytes) TCP Hash tables configured (established 8192 bind 8192) NET Registered protocol family 1 NET Registered protocol family 17 md Autodetecting RAID arrays. md autorun ... md ... autorun DONE. RAMDISK Compressed image found at block 0 VFS Mounted root (ext2 filesystem). ---- in linuxrc --- proc mount success libbuffalo mount success -RamdiskRoot- -- linuxrc finished. -- Freeing init memory 112K init started BusyBox v1.2.2 (2007.01.15-11 18+0000) multi-call binary Starting pid 242, console /dev/ttyS0 /etc/init.d/rcS --- rcStart (initrd) --- ===== Starting MountSystemFolders ===== mounting procfs ... [Success] mounting sysfs ... [Success] remounting rootfs ... [Success] mounting all devices ... [Success] --MountNandDevice-- ===== Starting Kevent.sh ===== [Success] ===== Starting networking.sh ===== Deconfiguration network interface lo eth0 killall dhcpcd no process killed create network files.. IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[] killall dhcpcd no process killed route SIOC[ADD|DEL]RT No such process Configuration network interface lo eth0 requesting DHCP tout=30[s] eth0 link down eth0 link up 5 , full duplex 5 , speed 100 Mbps 5 /etc/dhcpc/dhcpcd.exe /etc/dhcpc/dhcpcd-eth0.info new dhcpcd.exe interface eth0 has been configured with new IP=192.168.1.12 hostname is setted to KUROBOX-PRO [Success] ===== Starting sethostname.sh ===== hostname is setted to KUROBOX-PRO [Success] ===== Starting clientUtil_servd.sh ===== Starting clientUtil_server starting on eth0 start at debug mode clientUtil_server Ver.1.01 listen device name = eth0 [Success] Starting pid 484, console /dev/ttyS0 /sbin/getty KUROBOX-PRO login } ログインして更新コマンドを実行する実行 ~ # update_mtd.sh all ***** Cleaning and collect badlist /dev/mtd1 ***** ***** copying /boot/uImage.buffalo to /dev/mtd1 ***** ***** Cleaning /dev/mtdchar2 ***** ***** Writing /boot/nandrootfs.jffs2 to /dev/mtdchar2 ***** ***** copying /boot/u-boot.bin to /dev/mtd0 ***** 480+1 records in 480+1 records out ***** Cleaning /dev/mtdchar3 ***** Done. ~ # リブートする ~ # reboot Orion1 CPU = Low === KURO U-Boot. === ** LOADER ** ** KUROBOX BOARD KURO_BOX LE (CFG_ENV_ADDR=fffff000) U-Boot 1.1.1 (Apr 10 2007 - 18 10 08) Marvell version 1.12.1 - TINY DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB [256kB@fffc0000] Flash 256 kB Addresses 20M - 0M are saved for the U-Boot usage. Mem malloc Initialization (20M - 16M) Done NAND 256 MB Soc 88F5182 A2 CPU ARM926 (Rev 0) running @ 500Mhz Orion 1 streaming disabled SysClock = 250Mhz , TClock = 166Mhz USB 0 host mode USB 1 host mode PCI 0 PCI Express Root Complex Interface PCI 1 Conventional PCI, speed = 33000000 Net egiga0 [PRIME] Using 88E1118 phy Found boot image hit any key to switch tftp boot. Hit any key to stop autoboot 0 system_bootend Hit any key to stop autoboot 0 Loading from device 0 NULL at 0xfa000000 (offset 0x20000) Image Name Linux-2.6.12.6-arm1 Created 2007-04-10 13 45 13 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736548 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 stop_sound ## Booting image at 00100000 ... Image Name Linux-2.6.12.6-arm1 Created 2007-04-10 13 45 13 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736548 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 Verifying Checksum ... OK OK Starting kernel ... arg console=ttyS0,115200 root=/dev/mtdblock2 rw panic=5 BOOTVER=1.091 CONFIG_KUROBOX_PLATFORM CONFIG_KUROBOX_KUROBOX --- Uncompressing Linux........................................................ ......................................................... done, booting the kernel. Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (C odeSourcery ARM 2005q3-2)) #27 Tue Apr 10 22 47 16 JST 2007 CPU ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ) CPU0 D VIVT write-back cache CPU0 I cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets CPU0 D cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets Machine MV-88fxx81 Using UBoot passing parameters structure Sys Clk = 250000000, Tclk = 166664740 Memory policy ECC disabled, Data cache writeback Built 1 zonelists Kernel command line console=ttyS0,115200 root=/dev/mtdblock2 rw panic=5 BO OTVER=1.091 PID hash table entries 1024 (order 10, 16384 bytes) Console colour dummy device 80x30 Dentry cache hash table entries 32768 (order 5, 131072 bytes) Inode-cache hash table entries 16384 (order 4, 65536 bytes) Memory 128MB 0MB 0MB 0MB = 128MB total Memory 126208KB available (3037K code, 426K data, 112K init) Mount-cache hash table entries 512 CPU Testing write buffer coherency ok NET Registered protocol family 16 serial_initialize_ttyS1 (Debug) ttyS1 is initialized. config_device_cs Error Unknown board CPU Interface ------------- SDRAM_CS0 ....base 00000000, size 128MB SDRAM_CS1 ....disable SDRAM_CS2 ....disable SDRAM_CS3 ....disable PEX0_MEM ....base e0000000, size 128MB PEX0_IO ....base f2000000, size 1MB PCI0_MEM ....base e8000000, size 128MB PCI0_IO ....base f2100000, size 1MB INTER_REGS ....base f1000000, size 1MB DEVICE_CS0 ....base fa000000, size 2MB DEVICE_CS1 ....base f4000000, size 32MB DEVICE_CS2 ....base fa800000, size 1MB DEV_BOOCS ....base ff800000, size 8MB CRYPTO ENG ....no such Flash bankwidth 1, base ff800000, size 400000 KUROBOX FLASH size 4096[KB] Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- KUROBOX_BO ARD_KUROBOX Soc 88F5182 A2 Detected Tclk 166664740 and SysClk 250000000 Marvell USB EHCI Host controller #0 c04e4b00 Marvell USB EHCI Host controller #1 c04e4a40 pexBarOverlapDetect winNum 2 overlap current 0 mvPexInit Warning Bar 2 size is illigal it will be disabled please check Pex and CPU windows configuration PCI bus0 Fast back to back transfers enabled PCI bus1 Fast back to back transfers enabled SCSI subsystem initialized usbcore registered new driver usbfs usbcore registered new driver hub Use the XOR engines (offloading) for enhancing the following functions o RAID 5 Xor calculation o kernel memcpy o kenrel memzero o copy user to/from kernel buffers Number of XOR engines to use 2 cesadev_init(c00122e4) Fast Floating Point Emulator V0.9 (c) Peter Teichmann. inotify device minor=63 JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc. SGI XFS with no debug enabled Serial 8250/16550 driver $Revision 1.90 $ 4 ports, IRQ sharing disabled ttyS0 at MMIO 0x0 (irq = 3) is a 16550A ttyS1 at MMIO 0x0 (irq = 4) is a 16550A io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered RAMDISK driver initialized 3 RAM disks of 32768K size 1024 blocksize loop loaded (max 8 devices) Marvell Gigabit Ethernet Driver egiga o Ethernet descriptors in DRAM o DRAM SW cache-coherency o Checksum offload enabled o Loading network interface ** egiga_init_module (10) eth0 Intergrated Sata device found scsi0 Marvell SCSI to SATA adapter scsi1 Marvell SCSI to SATA adapter Vendor Hitachi Model HDT725050VLA360 Rev V56O Type Direct-Access ANSI SCSI revision 03 SCSI device sda 976773168 512-byte hdwr sectors (500108 MB) SCSI device sda drive cache write back SCSI device sda 976773168 512-byte hdwr sectors (500108 MB) SCSI device sda drive cache write back sda sda1 sda2 sda3 sda4 Attached scsi disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0 physmap flash device 400000 at ff800000 Found SST 39LF020 phys_mapped_flash Found 1 x8 devices at 0x0 in 8-bit bank number of JEDEC chips 1 cfi_cmdset_0002 Disabling erase-suspend-program due to code brokenness. RedBoot partition parsing not available Debug nand_scan nand_flash_ids[i].pagesize is exist Debug nand_scan mtd- erasesize=0x00020000 Debug nand_scan mtd- oobblock=0x00000800 Debug nand_scan mtd- oobsize=0x00000040 NAND device Manufacturer ID 0x20, Chip ID 0xda (ST Micro NAND 256MiB 3,3 V 8-bit) Scanning device for bad blocks Bad eraseblock 854 at 0x06ac0000 Using static partition definition Creating 3 MTD partitions on "nand_mtd" 0x00000000-0x00400000 "uImage" 0x00400000-0x04400000 "rootfs" 0x04400000-0x10000000 "extra" usbmon debugs is not available ehci_platform ehci_platform.4523 EHCI Host Controller ehci_platform ehci_platform.4523 new USB bus registered, assigned bus numb er 1 ehci_platform ehci_platform.4523 irq 17, io mem 0x00000000 ehci_platform ehci_platform.4523 park 0 ehci_platform ehci_platform.4523 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 1-0 1.0 USB hub found hub 1-0 1.0 1 port detected ehci_platform ehci_platform.16781 EHCI Host Controller ehci_platform ehci_platform.16781 new USB bus registered, assigned bus num ber 2 ehci_platform ehci_platform.16781 irq 12, io mem 0x00000000 ehci_platform ehci_platform.16781 park 0 ehci_platform ehci_platform.16781 USB 0.0 initialized, EHCI 1.00, driver 1 0 Dec 2004 hub 2-0 1.0 USB hub found hub 2-0 1.0 1 port detected USB Universal Host Controller Interface driver v2.2 Initializing USB Mass Storage driver... usbcore registered new driver usb-storage USB Mass Storage support registered. usbcore registered new driver usbhid drivers/usb/input/hid-core.c v2.01 USB HID core driver mice PS/2 mouse device common for all mice md raid0 personality registered as nr 2 md raid1 personality registered as nr 3 md raid5 personality registered as nr 4 raid5 measuring checksumming speed arm4regs 304.000 MB/sec 8regs 215.200 MB/sec 32regs 249.200 MB/sec raid5 using function arm4regs (304.000 MB/sec) md md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27 Buffalo Platform Linux Driver(Light) 0.01 installed. MICON ctrl (C) BUFFALO INC. V.1.00 installed. Kernel event proc (C) BUFFALO INC. V.1.00 installed. MICON V2 (C) BUFFALO INC. V.1.00 installed. NET Registered protocol family 2 IP routing cache hash table of 1024 buckets, 8Kbytes TCP established hash table entries 8192 (order 4, 65536 bytes) TCP bind hash table entries 8192 (order 3, 32768 bytes) TCP Hash tables configured (established 8192 bind 8192) NET Registered protocol family 1 NET Registered protocol family 17 md Autodetecting RAID arrays. md autorun ... md ... autorun DONE. Empty flash at 0x00df85f8 ends at 0x00df8800 VFS Mounted root (jffs2 filesystem). Freeing init memory 112K --- rcStart (NANDroot) --- ===== Starting MountSystemFolders ===== mounting procfs ... [Success] mounting sysfs ... [Success] mouting usbfs ... [Success] remouting rootfs ... [Success] mounting all devices ... [Success] ===== Starting checkroot.sh ===== rm /var/lock/perfmon is a directory rm /var/lock/printing is a directory rm /var/lock/subsys is a directory [Success] ===== Starting Kevent.sh ===== [Success] ===== Starting mount_share.sh ===== Mounting /dev/sda4 on /mnt/disk1 as a xfs file system. XFS mounting filesystem sda4 Starting XFS recovery on filesystem sda4 (dev sda4) Ending XFS recovery on filesystem sda4 (dev sda4) Success. Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system. Success. [Success] ===== Starting sethostname.sh ===== hostname is setted to KUROBOX-PRO [Success] ===== Starting networking.sh ===== create network files.. IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[] killall dhcpcd no process killed route SIOC[ADD|DEL]RT No such process Configuration network interface lo eth0 requesting DHCP tout=30[s] eth0 link down eth0 link up 5 , full duplex 5 , speed 100 Mbps 5 /etc/dhcpc/dhcpcd.exe /etc/dhcpc/dhcpcd-eth0.info up dhcpcd.exe interface eth0 has been configured with old IP=192.168.1.12 hostname is setted to KUROBOX-PRO [Success] ===== Starting httpd.sh ===== [Success] ===== Starting telnet.sh ===== [Success] ===== Starting inetd.sh ===== [Success] ===== Starting smb.sh ===== $Starting SMB services $Starting NMB services [Success] ===== Starting clientUtil_servd.sh ===== Starting clientUtil_server starting on eth0 [Success] ===== Starting bootcomplete.sh ===== [Success] ===== Starting FanController.sh ===== [Success] ===== Starting boss.sh ===== ... .. -~~(~~ .~ shDBDhz+(-. .~+sDDBNBDhhszDBNNNNBNNNBDs - ~sBNNNNNNNNNNNNNNNNNNNNNNNNNBs -=DNNBNNNNNNNNNNNNNNNNNBNNNNNNNNBz .~zNNNNNNNNNNNNNNNNNNNNNNNNNNBNNNNNNNz~ ~hBNNNNBNNNNNNNNNNNNNNNNNNNNNNNNNNNNNND+ (hNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNBs- .~zNNNNNNNNNNNNNNNNNNNNNNNBNNNNNNBNNBNNNNNNBs ~sBNNNNNNNNNNNNNNNNNNNNNNNNNNNNBNNNNNNNNNNNNNz (+DNNNNNNNNNNNNNNNNNNNNNNDzNNNNNhzDNNBNNNNNNNNBs (sNNNNNNNNNNNNNNNNNNNNNNB=~hNNNN=~(sDNNNNNNNNNND (+DNNNNNNNNNNNNNNNNNNNNNNs .=NNNNz- (zDNNNNNNNNNz ~=BNNNNNNNNNNNNNNNNNNNNND- .=BNNNN . .(hNNNNNNNNB ~sNNNNNNNNNNNNNNNNNNNNND+. .+BNNNN+ ~sBNNNNNNN (zNNNNNNNNNNNNNNNNNNNNND ..+BNBNB=- .+BNNNNNNh (zNNNNNNNNNNNNNNNNNNNBB= . hNBBNs+- +DNNNBND (sNNNNNNNNNNNNNNNNNNNND( -DhDBN+ - . =NNNNNB ~+DNNBNNNNNNNNNNNNNNNNz =D=Dhh+( . ~DBNNNB ~(sNNNNNNNNNNNNNNNNNNNz. -hs(zz+ ( . .=NNNNN ~=NNBBBBNNNNNNNNNNNNB= ==-=+s((~. .~BNNNB ~=Nhs +++hNNNNNNNNBz - .~=-.s(+-(- hBNND =Ds+hz( ~hNNNNNNND+ ..-+ .-((( ~ ... -hNNNNDs ~+z(BN=. . BNNNNBhhDD=+ ~. ~-=shBBDhz+( -sBNNNBBNBz ~(=z(BD- ~~hBNNNs~-( zDDs+~(shzssszDBNDh= sBNNNNNNNBN ~~+s z=.-zh~sNNND . . zhhh==shDBNNNNNNNBDDNNNNNNNNNh ~~ ss+ .zBBs~zND+ ..-+zDBNNNNNNNNNNNhzNNNNNNNNND+ ~~(=h +DBz-sBs~ . (BBNNNNNNNNNz- BBNNBNNND= ~(~ zss(( (z sD+ ~DNNNNNNNNNz~ sNNNNNNDs ~(=Ds= ...-(h . . .. BNNNNNNNNz~ -hNNNBh ~(hNs(. =- .=BNNNNNBNs- .(hs== BNz~ . .(hBNNBDz .~ - -hNNh(. .. . (++~ . - . hBNB+ -+( . .- . zDNz( . ~+ - .. . .-. ..~(-. . . .~+(. .. -- . . . + ~ ~. ..... .- . ---(~~~( ~. .. . .((--- -~~(~ . . +s=(- -(+. Let s start a KURO-BOX! .... .(hBDzDD=. and have a fun time... .. .. . sDh+. . .. . ..-- . .. .. ... ....... . . .. .. - .. ... [Success] KUROUTOSHIKOU KUROBOX Series KUROBOX/PRO(KOSHO) KUROBOX-PRO login 最終更新日:2007-05-28
https://w.atwiki.jp/aerocats/pages/33.html
標準Linuxの/usr/local/bin/内にある。 HDDの初期化の役割を担う。 ユーザーの意思次第で、開発用LinuxをHDDに設置したりHDDブートするように設定する。 動作内容 スクリプト スクリプト詳細ExitWithError関数 スクリプト本文 デバイスの初期化 動作内容 HDDがマウントされていないことを確認。されていればエラー終了。 HDDがxfs形式でフォーマットされていないことを確認。されていればエラー終了。 /mnt/mtdにChangeMeDevHDDがあるかどうかを確認して以下を実行。 ある場合 HDDを/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4の4つのパーティションに切り、それぞれをフォーマットする(マウントはしない)。 デバイス フォーマット形式 /dev/sda1 ext3 /dev/sda2 xfs /dev/sda3 swap /dev/sda4 xfs SetupDevEnv.shの実行 /mnt/mtdにhddrootfs.tar.gz、uImage.buffaloがあるかどうかを確認して以下を実行。 ある場合 /mnt/bootディレクトリを作成し、/dev/sda1をext3形式でマウントして、そこにuImage.buffaloをコピーする。 /mnt/rootfsディレクトリを作成し、/dev/sda2をxfs形式でマウントして、そこにhddrootfs.tar.gzを展開する。 デバイス マウントポイント マウントタイプ /dev/sda1 /mnt/boot ext3 /dev/sda2 /mnt/rootfs xfs /usr/local/bin/kuro_libを/mnt/rootfs/usr/local/binにコピーする。 ChangeMyUbootEnvがあればU-Boot環境変数を書き換える。なければそのまま終了する。 ない場合 エラー終了させる。 ない場合 HDDを/dev/sda1と1つだけのパーティション?に切りxfs形式でフォーマットする。 デバイス フォーマット形式 /dev/sda1 xfs /dev/sda1を/mnt/disk1にxfs形式でマウントする。 デバイス マウントポイント マウントタイプ /dev/sda1 /mnt/disk1 xfs /mnt/disk1のパーミッションを777にする。 スクリプト #!/bin/sh . /usr/local/bin/kuro_lib # $1 Error type {mounted | formatted} ExitWithError(){ miconapl -a led_set_cpu_mcon diag miconapl -a led_set_on_off diag miconapl -a led_set_brink diag miconapl -a bz_on on3off3 case $1 in mounted) echo "disk is already mounted!" /dev/console ;; formatted) echo "disk is already formatted!" /dev/console ;; esac sleep 5 miconapl -a bz_on miconapl -a led_set_brink off miconapl -a led_set_on_off off miconapl -a led_set_cpu_mcon off exit 1 } # Check point 1. disk is already mounted or not. IsMounted ${DISK1_DEV} ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}1 ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}4 ; [ $? = 1 ] EixtWithError mounted # Check point 2. disk is already formatted or not. XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}1 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}4 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted # OK! Disk is not mounted and not formatted. miconapl -a led_set_code_information 28 miconapl -a bz_on button if [ -e ${CHANGE_TO_DEVHDD_FILE} ] ; then fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition Format_EXT3 ${DISK1_DEV}1 Format_XFS ${DISK1_DEV}2 Format_XFS ${DISK1_DEV}4 mkswap ${DISK_DEV}3 /usr/local/sbin/SetupDevEnv.sh else fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition1 Format_XFS ${DISK1_DEV}1 MountShare ${DISK1_DEV} ${DISK1_MPT} fi miconapl -a led_set_code_information clear ~ # スクリプト詳細 ブロックごとに見てみる。 #!/bin/sh シェルの指定。shを指定している。 . /usr/local/bin/kuro_lib /usr/local/bin/kuro_libをサブシェルで実行している。 このkuro_lib内の InMounted関数 Format_EXT3関数 Format_XFS関数 MountShare関数 IsHavePartition関数 DISK1_DEV変数(=/dev/sda) DISK1_MPT変数(=/mnt/disk1) CHANGE_TO_DEVHDD_FILE変数(=/mnt/mtd/ChangeMeDevHDD) HEXDUMP変数(=/usr/bin/hexdump) を使用するためだ。 ExitWithError関数 関数の定義が始まる。なお、この項目は関数が以後の命令で呼び出された時に機能する内容であり、スクリプト実行と同時に実行されるわけではない。 # $1 Error type {mounted | formatted} ExitWithError(){ 第1引数はmountedかformattedというエラータイプだ、と解説されている。 miconapl -a led_set_cpu_mcon diag miconapl -a led_set_on_off diag miconapl -a led_set_brink diag miconapl -a bz_on on3off3 まずはどのタイプのエラーであれ(この関数が呼び出されている時点で何らかのエラーには間違いないため)、miconaplコマンドでLEDとブザーが共通の操作をされている。 詳しくはmiconaplコマンドで記すが、この4行で エラーLEDが点滅 ブザーがピッピッピと鳴る という動作になる。 case $1 in 先ほどの第1引数の内容によって以後の処理動作を分けている。 第1引数がmountedの場合 mounted) echo "disk is already mounted!" /dev/console ;; echoコマンド?で「disk is already mounted!」という一文がコンソールデバイスに出力されている。 これだけでこのcase文を抜ける。 第1引数がformattedの場合 formatted) echo "disk is already formatted!" /dev/console ;; echoコマンド?で「disk is already formatted!」という一文がコンソールデバイスに出力されている。 これだけでこのcase文を抜ける。 esac 以上の処理でmountedかformattedか、というcase文は終了する。 sleep 5 miconapl -a bz_on miconapl -a led_set_brink off miconapl -a led_set_on_off off miconapl -a led_set_cpu_mcon off 5秒間一時停止した後に、LEDとブザーの動作を止めている。 exit 1 終了ステータスに異常を表す「1」を指定。 } ExitWithError関数はここまで。 スクリプト本文 ここからがいわゆるInitDisk1.shのスクリプト本体だ。 # Check point 1. disk is already mounted or not. まずはチェックポイント1としてHDDがすでにマウントされているかいないかを以下で調査している。 サブシェルで走らせている/usr/local/bin/kuro_lib内の関数「IsMounted」を使うことになる。 ここで述べておく方が理解が容易なので、InitDisk1.shスクリプトの内容ではないが/usr/local/bin/kuro_lib内のIsMounted関数に触れておく。 IsMounted関数 /usr/local/bin/kuro_lib内の関数であり、引数を1つ付けさせて内容により戻り値として「0」か「1」を返す仕組みのようだ。 # $1 device of check target # retval # 1 device $1 is mounted. # 0 device $1 is not mounted. 第1引数はチェック対象のデバイスであり、このIsMounted関数が戻り値1を返せばそのデバイスはマウントされている、0を返せばされていないとする旨の解説だ。 IsMounted(){ MOUNTED=`grep $1 /proc/mounts` MOUNTEDという変数を用意しそこにgrep $1 /proc/mountsの結果を代入している。 $1とはIsMounted関数に付けられた第1引数であり、${DISK1_DEV}すなわち/dev/sdaを指す。 つまり、procコマンド?でマウント状態を調べたとき、/dev/sdaという文字が含まれるものを抽出していることになる。 その結果がMOUNTEDという変数に代入される。 if [ "${MOUNTED}" != "" ] ; then return 1 else return 0 fi このMOUNTED変数がカラでなければ戻り値1を返しIsMounted関数を終了、そうでなければ(カラであれば)0を返しIsMounted関数を終了する、という内容。 この作業で、/dev/sdaがマウントされているかどうかが判別できる。 return 0 上のいずれにもあてはまらなければ(実際にはあり得ないが)0を返す。 } IsMounted関数はここまで。 ここからまたスクリプト本文の解説に戻る。 IsMounted ${DISK1_DEV} ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}1 ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}4 ; [ $? = 1 ] EixtWithError mounted IsMounted関数に${DISK1_DEV}(=/dev/sda)、${DISK1_DEV}1(=/dev/sda1)、${DISK1_DEV}4(=/dev/sda4)という引数をそれぞれ付け、戻り値は0か1が返ってくるのを待ち、返って来た結果(戻り値「$?」)が1ならばExitWithError関数をmountedという引数を付けて実行している。 /dev/sdaもしくは/dev/sda1、/dev/sda4のいずれか一つでもマウントされていればInitDisk1.shはエラー終了してしまう、ということだ。 誤動作防止のためだと思われる。 これでチェックポイント1であるマウントされているかどうかの調査は終了する。 # Check point 2. disk is already formatted or not. 次にチェックポイント2としてHDDがすでにフォーマットされているかいないかを以下で調査している。 XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}1 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}4 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted 流れとしては XFS_FORMATTEDという変数を用意 そこに対象となるデバイスのフォーマット形式を代入 それがxfs形式かどうかを判別 xfs形式ならばExitWithError関数にformatted引数を付けてエラー処理 となる。 デバイスのフォーマットの調べ方だが、ここではddコマンドで行っている。 ddコマンドのofパラメータは出力先を指すが、今回これは指定しないのですなわち標準出力を指す。 xfs形式でフォーマットされたデバイス(パーティション?)は、 dd if=デバイス bs=1 count=3 とすると XFS3+0 records in 3+0 records out とコンソールには表示されるが、内部的にはXFSの3文字だけが出力されている(of=/mnt/disk1/dd.txtなどで確認してみるとはっきりする)。 ext3ではXFSは表示されないが、XFS形式のものをmkfs.ext3で上書きした場合はXFSと表示されてしまう。 パーティション?の先頭を0で埋めた後、領域を破壊した上でmkfs.ext3を実行しないと機械的にはXFSとみなされるので注意が必要だ。 上の命令は/dev/sda、/dev/sda1、/dev/sda4のいずれかがxfs形式ならばformattedという引数を付けてExitWithError関数を実行(すなわちエラー処理)する、という意味だ。 # OK! Disk is not mounted and not formatted. 以上、2つのチェックポイントを無事通過できると次の処理が待っている。 デバイスの初期化 miconapl -a led_set_code_information 28 miconapl -a bz_on button オレンジのLEDを点滅させ、ブザーをピっと鳴らす。 /mnt/mtdにChangeMeDevHDDがある場合 if [ -e ${CHANGE_TO_DEVHDD_FILE} ] ; then この「-e」という評価式は「存在すれば真」なので、CHANGE_TO_DEVHDD_FILE(/mnt/mtd/にChangeMeDevHDD)が存在すれば以下を実行、という意味になる。 なお、このChangeMeDevHDDとは、附属CD-ROM内にあるもので「HDDパーティション?を開発用に設定するための意思表示ファイル」となっている。中身は何もない。 この条件分岐のためだけにあり、あるかないかが問題なだけだ。 fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition /usr/local/bin/PartitionDefinitionに記載されている内容に従って/dev/sdaにパーティション?をきっていく。 記載された内容とは パーティション? サイズ パーティションタイプ /dev/sda1 50MB Linux /dev/sda2 3GB Linux /dev/sda3 128MB swap /dev/sda4 残り Linux となっている。 次に、きられたパーティション?に今度はファイルシステムを導入する。 まずは/usr/local/bin/kuro_lib内の関数「Format_EXT3」を説明する。 Format_EXT3関数 /usr/local/bin/kuro_lib内の関数であり、引数一つを受け取りそのデバイスをext3形式にフォーマットする関数のようだ。 # $1 target device to format Format_EXT3(){ 第1引数のデバイスをフォーマット対象とする。 echo "***** Starting to format $1 *****" 画面に「***** Starting to format 対象デバイス *****」と表示する。 mkfs.ext3 $1 mkfs.ext3コマンド?で第1引数のデバイスをext3形式でフォーマットする。 if [ $? -eq 0 ] ; then $?とは上のmkfs.ext3コマンド?の実行結果の終了ステータスを指しているのだが、これが「0」すなわち成功ならば次を実行、となっている。 echo "Format is succeeded without error." 画面に「Format is succeeded without error.」と表示する。つまり「フォーマットはエラーもなく成功した。」と表示している。 else $?が「0」でなければ、つまりフォーマットに失敗しているのならば次を実行。 return 1 exit 1 fi return 1とは、関数の戻り値を1に明示的に指定してFormat_EXT3関数を終了しているわけだが、このスクリプト内で戻り値を具体的に利用する様子は見受けられないので意味はないだろう。 /usr/local/bin/kuro_libは様々なスクリプトで利用されているライブラリ的なスクリプトなので、どこかで利用するものかもしれない。 exit 1も同じような意味合いだが、終了ステータスを「1」(異常)に設定してスクリプト(/usr/local/bin/kuro_lib)を終了するようにしている。 return 0 戻り値「0」をセットしFormat_EXT3関数を抜ける。 } Format_EXT3関数はここまで。 次に/usr/local/bin/kuro_lib内の関数「Format_XFS」を説明する。 Format_XFS関数 /usr/local/bin/kuro_lib内の関数であり、引数一つを受け取りそのデバイスをxfs形式にフォーマットする関数のようだ。 # $1 target device to format. Format_XFS(){ 第1引数のデバイスをフォーマット対象とする。 KEY=`dd if=$1 bs=1 count=3` KEYという変数を用意し、そこにdd if=$1 bs=1 count=3の結果を代入する。 先ほど検証したようにxfs形式のデバイスに対してこのコマンドを使うと「XFS」と出力される。 if [ "${KEY}" = "XFS" ] ; then KEYの値がXFSならば次を実行、という意味だ。つまりここは対象デバイスのフォーマット形式がxfs形式かどうかを条件分岐にしている。 . /etc/melco/info /etc/melco/infoをサブシェルで走らせているが、標準Linuxにはこのファイルは存在しない。 製品仕様書にも初期化SWの項目に 内蔵HDD(/dev/sda)が既にxfs形式でフォーマットされている場合、フォーマットは行われない。但し、/etc/melco/info内、force_format=yesとすることで、xfsでフォーマットされている/いないにかかわらず、フォーマットを行うようにすることができる。 と記載されている。強制フォーマットの機能を使うのであれば自分で/etc/melco/infoを用意するしかない。 if [ "${force_format}" = "yes" ] ; then /etc/melco/info内の「force_format」項目が「yes」となっていれば以下を実行。 echo "Disk (or partition) is looks like already formatted." echo "If you stop format, Press Ctrl+C in 10 seconds!!!" 画面に「Disk (or partition) is looks like already formatted.If you stop format, Press Ctrl+C in 10 seconds!!!」と表示。 「ディスク(あるいはパーティション?)は既にフォーマットされているようです。フォーマットを中止する場合は10秒以内にCtrl+Cを押してください」という意味。 COUNTER=10 COUNTERという変数を用意し、そこに10を代入。 echo -n "waiting " 画面に「waiting」と表示。-nオプションは「テキストの行末で改行しない」という意味。 while [ ${COUNTER} -gt 0 ] COUNTER変数が0より大きければdo~doneの内容を繰り返す。 do echo -n "." sleep 1 COUNTER=$((${COUNTER} - 1)) done 「waiting」の行末に「.」を表示し、1秒待った後COUNTER変数から1を引く、という内容。 先のwhile条件から、1を引いた結果が0よりも大きければ同じことを繰り返す、ということなので、これで結果的に10秒間待機することになる。 「.」を1秒ごとに表示させるためにwhile文を使ったのだろう。 echo "" echo "OK, go on formatting." echoで空白を表示、これは改行させる目的で、次に「OK, go on formatting.」を表示させている。 else /etc/melco/info内の「force_format」項目が「yes」となっていなければ以下を実行。 return 0 戻り値を「0」に設定しFormat_XFS関数を抜ける。つまりこの関数内の以後の命令は実行しない。 fi fi if [ "${force_format}" = "yes" ]を抜け、すぐ次にif [ "${KEY}" = "XFS" ]も抜けている。 echo "***** Cleaning Disk partition information *****" 画面に「***** Cleaning Disk partition information *****」と表示。 dd if=/dev/zero of=$1 bs=512 count=1 ddコマンドを使ってデバイスの先頭から512バイトに「0」を書き込んでいる。 要するにそのデバイス(パーティション?)を先頭から512バイト分データを消去している。 echo "***** Starting to format $1 *****" 画面に「***** Starting to format 対象デバイス *****」と表示。 mkfs.xfs $1 -f デバイスをmkfs.xfsコマンド?でxfs形式にフォーマットしている。-fは上書きオプション。 if [ $? -eq 0 ] ; then 終了ステータスが0であれば、つまり上のmkfs.xfsコマンド?がエラーでなければ以下を実行。 echo "Format is succeeded without error." 画面に「Format is succeeded without error.」と表示。 else mkfs.xfsでエラーが発生すれば return 1 exit 1 fi 戻り値を1、終了ステータスを1に設定して終了。 return 0 戻り値を0に設定しFormat_XFS関数を抜ける。 } Format_XFS関数はここまで。 これら関数を使ってファイルシステムを導入する命令が以下。 Format_EXT3 ${DISK1_DEV}1 Format_XFS ${DISK1_DEV}2 Format_XFS ${DISK1_DEV}4 mkswap ${DISK_DEV}3 わかりやすく表にすれば デバイス フォーマット形式 /dev/sda1 ext3 /dev/sda2 xfs /dev/sda3 swap /dev/sda4 xfs という意味だが、 mkswap ${DISK_DEV}3 は上のパーティション?の様子からすると mkswap ${DISK1_DEV}3 でなければならないはずだ。開発用Linuxのfstabで/dev/sda3をswapでマウントしようとしても、フォーマットが完了していないため失敗するだろう。 /usr/local/sbin/SetupDevEnv.sh そして、/usr/local/sbin/SetupDevEnv.shを実行する。詳細はSetupDevEnv.shの項目で説明する。 その後、miconapl -a led_set_code_information clearを実行してInitDisk1.shを終了する。 /mnt/mtdにChangeMeDevHDDがない場合 else CHANGE_TO_DEVHDD_FILE(/mnt/mtd/にChangeMeDevHDD)が存在しなければ以下を実行。 fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition1 /dev/sdaを/usr/local/bin/PartitionDefinition1に従ってパーティション?分割作業する。 パーティション? サイズ パーティションタイプ /dev/sda1 すべて Linux という内容だ。 Format_XFS ${DISK1_DEV}1 Format_XFS関数で/dev/sda1をxfs形式にフォーマット。 MountShare ${DISK1_DEV} ${DISK1_MPT} MountShare関数に 第1引数 /dev/sda 第2引数 /mnt/disk1 という引数を付けて実行させている。 ここで/usr/local/bin/kuro_lib内のMountShare関数を説明する。 MountShare関数 /usr/local/bin/kuro_lib内の関数。4つまでの引数に対応し、3つの戻り値を設定できる。 # $1 target device to mount. # $2 target mountpoint of $1. # $3 File system of target device(default is xfs). # $4 Mounted device permission(default is 777). MountShare(){ 第1引数にマウントする対象デバイス、第2引数に対象デバイスのマウント先、第3引数に対象デバイスのファイルシステム(初期値はxfs形式)、第4引数にマウントしたデバイスのパーミッション(初期値は777)、という解説。 # ret 0 this is no partition disk. # ret 1 this is nand share type partition # ret 2 this is developkit type partition (maybe) MountShare関数の戻り値ではない。IsHavePartition関数からの戻り値を説明している。 戻り値「0」で「パーティション?が存在しないディスクです」、「1」で「NANDフラッシュ共有時(つまり標準Linux時)のパーティション?です」、「2」で「(おそらく)開発用Linux時のパーティション?です」と、それぞれ意味する。 if [ "$1" = "/dev/sda" -o "$1" = "/dev/sdb" ] ; then 第1引数が/dev/sdaあるいは/dev/sdbであれば以下を実行。 IsHavePartition $1 /usr/local/bin/kuro_lib内のIsHavePartition関数に第1引数を付けて実行している。 ここでIsHavePartition関数を説明する。 IsHavePartition関数 # $1 target device to check partition 第1引数にパーティション状態をチェックする対象デバイス、という解説。 # ret 0 this is no partition disk. # ret 1 this is nand share type partition # ret 2 this is developkit type partition (maybe) 戻り値「0」で「パーティション?が存在しないディスクです」、「1」で「NANDフラッシュ共有時(つまり標準Linux時)のパーティション?です」、「2」で「(おそらく)開発用Linux時のパーティション?です」と、それぞれ意味する。 IsHavePartition(){ if [ -x ${HEXDUMP} ] ; then HEXDUMP変数(=/usr/bin/hexdump)に-xオプションを付けて条件としている。-xオプションは「存在し、かつ実行可能なら真」という意味なので、ここでは「/usr/bin/hexdumpが存在し、かつ実行可能なら次を実行」という意味になる。 DISK_1_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "1p"|awk {print $10} ` DISK_1_PART_TAILという変数を用意し、そこにhexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "1p"|awk {print $10} という内容を代入している。 パイプで3つの命令がつながっているが、それぞれに分けて考えてみる。 hexdump hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 hexdumpコマンドを使っている。先頭から446バイト読み飛ばした所から64バイト分だけを読み込み、それを「8/1 "%02x " 2/4 "%10d " "\n"」というフォーマットで第1引数のデバイスを表示する、という意味になる。 HDDの先頭512バイトはMBR領域となっており、その中の先頭446バイトから64バイトはパーティションテーブルが4エントリ分(1エントリ16バイト)ある。 つまりここでは4つのパーティションテーブルを読み込んだことになる。 次に、詳細はhexdumpコマンドで説明するが、「繰り返し回数/バイト数 "フォーマット"」の羅列がhexdumpコマンドのフォーマット形式なので、この場合は 8回繰り返し/1バイト "フィールド幅2(2桁表示で満たない桁は0で表示)で16進数変換" 2回繰り返し/4バイト "フィールド幅10(10桁表示で満たない桁は空白で表示)で10進数変換" 改行 という内容になる。 つまり、「1バイトづつ8回、4バイトづつ2回、計16バイトを10回にわけて読み込み、それを4行に出力」という内容だ。 パーティションテーブルを1つ読み込んでは改行し、64バイト分すべてを16バイトづつ4行10フィールドで表現している。 4つのパーティション?を切ったHDDで試してみると以下の結果を得た。 00 01 01 00 83 fe 3f 06 63 112392 00 00 01 07 83 fe 7f 74 112455 5879790 00 00 41 75 82 fe 7f 85 5992245 273105 00 00 41 86 83 fe ff ff 6265350 150031035 sed sed -n "1p" 「-n」オプションでhexdumpコマンドから受け取った結果の1行目(pが行を表す)だけを抽出している。 ここの「1p」が「2p」「3p」「4p」と変化していくのは、それぞれパーティションテーブルを1から4まで読み、該当パーティションテーブル以外を破棄している。 先ほどの例で試すと 00 01 01 00 83 fe 3f 06 63 112392 という結果を得る。 awk awk {print $10} sedコマンド?から受け取った行の第10フィールドの値を出力している。 第10フィールドはLBAのパーティション?総セクター数(4バイト)を意味する。 つまり、最終的にDISK_1_PART_TAIL変数に代入したい値とは、各パーティション?の総セクター数であることがわかる。これはhexdumpコマンドで10進数にされている。 DISK_2_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "2p"|awk {print $10} ` DISK_3_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "3p"|awk {print $10} ` DISK_4_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "4p"|awk {print $10} ` 先ほどと同様な処理を各パーティション?ごとにDISK_パーティション番号_PART_TAILという変数に代入している。 例で試すと 112392 という結果。 総セクター数が0であればそのパーティション?は存在しない、という意味になる。 if [ "${DISK_1_PART_TAIL}" -ne 0 -a "${DISK_2_PART_TAIL}" -eq 0 -a "${DISK_3_PART_TAIL}" -eq 0 -a "${DISK_4_PART_TAIL}" -eq 0 ] ; then 第1パーティションの総セクター数が0ではない かつ第2~4パーティションの総セクター数が0 の場合に以下を実行する。 return 1 戻り値「1」を設定し関数を抜ける。 つまり「this is nand share type partition」ということになる。 elif [ "${DISK_1_PART_TAIL}" -ne 0 -a "${DISK_2_PART_TAIL}" -ne 0 -a "${DISK_3_PART_TAIL}" -ne 0 -a "${DISK_4_PART_TAIL}" -ne 0 ] ; then 第1~4パーティションの総セクター数が0ではない の場合に以下を実行。 return 2 戻り値「2」を設定し関数を抜ける。 つまり「this is developkit type partition (maybe)」ということだ。 else それ以外の場合、つまり 第1パーティションの総セクター数が0 の場合に以下を実行。 return 0 戻り値に「0」を設定し関数を抜ける。 つまり「this is no partition disk.」ということになる。 fi パーティション?総セクター数の条件分岐を終了する。 else 「/usr/bin/hexdumpが存在し、かつ実行可能」ではない場合は以下を実行、という意味。 return 0 戻り値に「0」を設定し関数を抜ける。 つまり「this is no partition disk.」ということになる。 fi 「/usr/bin/hexdumpが存在し、かつ実行可能」という条件分岐を終了する。 return 0 いずれにもあてはまらなかった場合、戻り値に「0」を設定し関数を抜ける。 つまり「this is no partition disk.」ということになる。 } IsHavePartition関数はここまで。 ここからまたMountShare関数に戻る。 RET=$? RETという変数を用意し、そこにIsHavePartition関数の戻り値を代入。 [ "${RET}" -eq 1 ] TARGET_DEV=${1}1 [ "${RET}" -eq 2 ] TARGET_DEV=${1}4 [ "${RET}" -eq 0 ] TARGET_DEV=${1} 戻り値が1ならば、TARGET_DEV変数にMountShare関数に付けた第1引数(if文の関係上、/dev/sdaか/dev/sdb)の第1パーティション?を代入する。 戻り値が2ならば、TARGET_DEV変数にMountShare関数に付けた第1引数(if文の関係上、/dev/sdaか/dev/sdb)の第4パーティション?を代入する。 戻り値が0ならば、TARGET_DEV変数にMountShare関数に付けた第1引数(if文の関係上、/dev/sdaか/dev/sdb)を代入する。 というように処理している。 else MountShare関数に付けた第1引数が/dev/sdaでも/dev/sdbでもなければ以下を実行。 TARGET_DEV=$1 TARGET_DEV変数にMountShare関数に付けた第1引数を代入。 fi MountShare関数に付けた第1引数が/dev/sdaか/dev/sdbか、という条件分岐を抜ける。 IsMounted ${TARGET_DEV} IsMounted関数に第1引数としてTARGET_DEV変数を渡す。先ほど説明したとおり、戻り値「1」で「device is mounted.」、戻り値「0」で「device $1 is not mounted.」という意味になる。 if [ $? = 1 ] ; then 戻り値が「1」ならば、つまり「device is mounted.」という意味ならば次を実行。 echo "${TARGET_DEV} is already mounted." 画面上に「対象デバイス is already mounted.」と表示。 return 1 戻り値「1」を設定しMountShare関数を抜ける。 fi IsMounted関数の戻り値による条件分岐を抜ける。 if [ "$3" = "" ] ; then MountShare関数の第3引数が何もなければ以下を実行する。 FS=xfs FSという変数を用意し、そこにxfsを代入する。 else MountShare関数の第3引数に何かあれば以下を実行する。 FS=$3 FSという変数を用意し、そこにその第3引数を代入する。 fi MountShare関数の第3引数の有無の条件分岐を抜ける。 if [ "$4" = "" ] ; then MountShare関数の第4引数が何もなければ以下を実行する。 PERMISSION=777 PERMISSIONという変数を用意し、そこに777を代入する。 else MountShare関数の第4引数に何かあれば以下を実行する。 PERMISSION=$4 PERMISSIONという変数を用意し、そこにその第4引数を代入する。 fi MountShare関数の第4引数の有無の条件分岐を抜ける。 echo "Mounting ${TARGET_DEV} on $2 as a ${FS} file system." 画面上に「Mounting 対象デバイス(MountShare関数の第1引数) on マウントポイント( MountShare関数の第2引数) as a ファイルシステムタイプ(MountShare関数の第3引数) file system.」と表示する。 mount -t ${FS} ${TARGET_DEV} $2 実際に設定した変数の値をもとにmountコマンドでマウントする。 case $? in mountコマンドの終了ステータスをもとに実行内容を変える。 0) 終了ステータス「0」(正常)の場合 chmod ${PERMISSION} $2 echo "Success." ;; chmodコマンド?で設定したパーミッションでマウントポイントのデバイスを指定し、画面上に「Success.」と表示してcase文を抜ける。 *) 終了ステータス「1」(異常)の場合 echo "Failed." return 1 ;; 画面上に「Failed.」と表示して、戻り値「1」を設定しMountShare関数を抜ける。 esac case文はここまで。 echo "" return 0 画面上を改行して戻り値「0」を設定しMountShare関数を抜ける。 } MountShare関数はここまで。 fi CHANGE_TO_DEVHDD_FILE(/mnt/mtd/にChangeMeDevHDD)の有無の条件分岐を抜ける。 miconapl -a led_set_code_information clear LEDの点滅を止める。